rcar_gen3: drivers: cpld: fix power-off on reset
authorSergii Boryshchenko <[email protected]>
Thu, 30 Nov 2017 12:53:52 +0000 (14:53 +0200)
committerMarek Vasut <[email protected]>
Tue, 29 Jan 2019 05:07:21 +0000 (06:07 +0100)
Method cpld_reset_cpu of bl31 is called from the Linux kernel and uses
GPIO6, GPIO2 pins as SPI bus lines to control the CPLD device. But in the
kernel GPIO6_8 pin are initialized to work in interrupt mode instead of
the input/output mode. This leads to the fact that the SPI bus becomes
non-functional. In this patch we switch the GPIO6_8 pin back to the
input-output mode.

Signed-off-by: Sergii Boryshchenko <[email protected]>
Signed-off-by: Marek Vasut <[email protected]>
drivers/renesas/rcar/cpld/ulcb_cpld.c

index 6b0361497e0dc4a15aeebcc6798dd0f5f63512b9..4830853739bffc234deb20d441d886a5d38bb907 100644 (file)
@@ -24,6 +24,9 @@
 #define GPIO_INOUTSEL2         0xE6052004
 #define GPIO_INOUTSEL6         0xE6055404
 
+/* General IO/Interrupt Switching Register */
+#define GPIO_IOINTSEL6         0xE6055400
+
 /* GPIO/perihperal function select */
 #define PFC_GPSR2              0xE6060108
 #define PFC_GPSR6              0xE6060118
@@ -93,6 +96,7 @@ static void cpld_init(void)
        gpio_pfc(PFC_GPSR2, SSTBZ);
        gpio_pfc(PFC_GPSR6, MOSI);
 
+       gpio_set_value(GPIO_IOINTSEL6, SCLK, 0);
        gpio_set_value(GPIO_OUTDT6, SCLK, 0);
        gpio_set_value(GPIO_OUTDT2, SSTBZ, 1);
        gpio_set_value(GPIO_OUTDT6, MOSI, 0);